Amazon Connectでお客様からの「ありがとう」をカウントしてみた

Amazon Connectでお客様からの「ありがとう」をカウントしてみた

Clock Icon2024.12.05

Amazon Connect アドベントカレンダー 2024、5日目の記事です!

クラスメソッドとギークフィードさん、クラウドビルダーズさん、ネットプロテクションズさん、AWSJさんの有志が募ってチャレンジしている企画になります。

(アドベントカレンダーのカレンダー一覧はこちら↓)
https://qiita.com/advent-calendar/2024/amazon-connect

はじめに

Amazon Connect Contact Lensの音声分析機能を使い、お客様からオペレーターへの「ありがとう」をカウントして記録する方法を考えてみました。

オペレーターとの通話時にお客様が「ありがとう」と発言したことをContact Lensのルールで検知し、EventBridge > Lambda > DynamoDBで「ありがとう」をカウントします。

shapes-1733312534303

やってみた

前提条件

  • Amazon Connectは構築済み

Amazon Connectの設定

Contact Lensの有効化

AWSコンソールから対象のAmazon Connectインスタンス > 分析ツールを開きます。
Contact Lensが有効になっていない場合は有効にして設定を保存します。

2024-12-04_00h38_26

コンタクトフローの設定

コンタクトフローに記録と分析の動作を設定ブロックを追加します。
通話記録と分析をオンに設定します。
分析は音声分析を有効にするにチェックを入れ、通話後の分析を選択します。

2024-12-04_00h46_17
2024-12-04_00h44_26

Contact Lensルールの作成

分析と最適化からルールを開き、ルールを作成を選択します。
会話分析のルールを作成します。
2024-12-04_00h48_06

Contact Lens 通話後分析が利用可能 を選択し、顧客が「ありがとう」と話した場合に検知するように設定します。
2024-12-04_01h35_19

アクションのカテゴリ名を入力し、アクションにはEventBridgeイベントを生成を選択します。
2024-12-04_01h46_03

ルールを作成します。

DynamoDBの設定

以下の内容でDynamoDBを作成します。
パーティションキー:date(文字列)
ソートキー:staff_id(文字列)

2024-12-04_23h20_30

Lambdaの設定

Lambda関数の作成

Lambda関数を作成します。
2024-12-04_20h46_30

一般設定のタイムアウトを1分に変更します。
2024-12-04_20h51_34

ロールに権限の追加

DynamoDBの記録用と、Connectのユーザー情報を取得する為に以下の権限を追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "connect:DescribeUser",
                "dynamodb:UpdateItem"
            ],
            "Resource": "*"
        }
    ]
}

EventBridgeから送信されるイベント

EventBridgeから送信されるイベントの構造は以下です。
このイベントのagentArnを使ってDynamoDBに記録する際のユーザー名を取得します。

{
 "version": "0", // set by EventBridge
 "id": "aaaaaaaa-bbbb-cccc-dddd-bf3703467718", // set by EventBridge
 "source": "aws.connect",
 "detail-type": "Contact Lens Post Call Rules Matched", 
 "account": "your AWS account ID",
 "time": "2020-04-27T18:43:48Z",
 "region": "us-east-1", // set by EventBridge
 "resources": ["arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN"],
 "detail": {
    "version": "1.0",
    "ruleName": "ACCOUNT_CANCELLATION", // Rule name
    "actionName": "NOTIFY_CUSTOMER_RETENTION",  
    "instanceArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN",
    "contactArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/contact/contact-ARN",
    "agentArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/agent/agent-ARN",
    "queueArn": "arn:aws:connect:us-east-1:your AWS account ID:instance/instance-ARN/queue/queue-ARN",
    }
}

https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/contact-lens-rules-eventbridge-event.html

コード

コード内のDynamoDBテーブル名を作成したDynamoDBテーブル名に変更します。
agent_arnからagent IDを抽出しagent nameを取得してDynamoDBに記録しています。

import boto3
import datetime
from datetime import timedelta

def extract_agent_id(agent_arn):
    # agent ARNから agent ID を抽出
    return agent_arn.split('/')[-1]

def get_instance_id(agent_arn):
    # agent ARNからinstance IDを抽出
    return agent_arn.split('/')[1]

def get_agent_username(connect_client, instance_id, agent_id):
    # Amazon Connectから agent の情報を取得
    response = connect_client.describe_user(
        InstanceId=instance_id,
        UserId=agent_id
    )
    return response['User'].get('Username', '')

def lambda_handler(event, context):
    # AWS クライアントの初期化
    dynamodb = boto3.resource('dynamodb')
    connect = boto3.client('connect')
    table = dynamodb.Table('DynamoDBテーブル名')

    # 現在の日時(JST)を取得
    jst_time = datetime.datetime.now() + timedelta(hours=9)
    current_date = jst_time.strftime('%Y-%m-%d')

    # イベントから agent の情報を抽出
    agent_arn = event['detail']['agentArn']
    agent_id = extract_agent_id(agent_arn)
    instance_id = get_instance_id(agent_arn)

    # Connect から agent の username を取得
    agent_username = get_agent_username(connect, instance_id, agent_id)

    # DynamoDB のレコードを更新
    # ありがとうカウントを1増やし、agent_name を設定
    table.update_item(
        Key={
            'date': current_date,
            'staff_id': agent_id
        },
        UpdateExpression='ADD arigato :arigato SET agent_name = :name',
        ExpressionAttributeValues={
            ':arigato': 1,
            ':name': agent_username
        }
    )

EventBridgeの設定

EventBridgeのルールを作成します。
名前を入力しデフォルトのまま作成を進めます。
2024-12-05_00h10_29

イベントソースは以下の内容で設定します。
イベントソース:AWSのサービス
AWSのサービス:Amazon Connect
イベントタイプ:Contact Lens Post Call Rules Matched

2024-12-05_00h11_01

ターゲットは以下の内容で設定します。
ターゲットを選択:Lambda 関数
関数:作成した関数を選択
2024-12-05_00h13_12

ルールを作成します。

動作確認

Amazon Connectに架電してありがとうがカウントされるか動作確認してみました。
約5分後にDynamoDBに記録されました。
2024-12-05_00h47_41

これでどのオペレーターが1日に何回ありがとうを言ってもらえたか記録できます。
お客様からの感謝を記録することでオペレーターのモチベーションアップにも繋がるかと思います。
記録されたデータを可視化してみてもよさそうですね。

参考情報

https://dev.classmethod.jp/articles/contact-lens-for-amazon-connect-summary-2023/
https://dev.classmethod.jp/articles/contact-lens-for-amazon-connect-ngword-detection
https://dev.classmethod.jp/articles/contact-lens-for-amazon-connect-email-notifications

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.